/**
 * 首页相关API接口
 * 包括港口商品、推荐商品等功能
 */
import http from '../utils/request.js'

const indexApi = {
  /**
   * 获取港口商品列表
   * @param {string|number} portId 港口ID
   * @param {object} params 查询参数
   * @param {number} params.page 页码，默认1
   * @param {number} params.size 每页大小，默认12
   * @param {string} params.keyword 搜索关键词，可选
   * @param {string} params.sortBy 排序方式：price_asc, price_desc, score_desc, sales_desc
   * @returns {Promise} 港口商品列表数据
   */
  getPortProducts(portId, params = {}) {
    const queryParams = new URLSearchParams()
    
    // 添加分页参数
    queryParams.append('page', params.page || 1)
    queryParams.append('size', params.size || 12)
    
    // 添加排序参数
    if (params.sortBy) {
      queryParams.append('sortBy', params.sortBy)
    }
    
    // 添加搜索关键词
    if (params.keyword && params.keyword.trim()) {
      queryParams.append('keyword', params.keyword.trim())
    }
    
    return http.get(`/user/index/ports/${portId}/products?${queryParams.toString()}`)
  },

  /**
   * 获取所有港口列表
   * @returns {Promise} 港口列表数据
   */
  getAllPorts() {
    return http.get('/user/index/ports')
  },

  /**
   * 获取港口商品统计信息
   * @param {string|number} portId 港口ID
   * @returns {Promise} 港口商品统计数据
   */
  getPortProductStats(portId) {
    return http.get(`/user/index/ports/${portId}/products/stats`)
  },

  /**
   * 获取港口商品分类统计
   * @param {string|number} portId 港口ID
   * @returns {Promise} 港口商品分类统计数据
   */
  getPortProductCategories(portId) {
    return http.get(`/user/index/ports/${portId}/categories`)
  },

  /**
   * 获取港口商品价格区间
   * @param {string|number} portId 港口ID
   * @returns {Promise} 港口商品价格区间数据
   */
  getPortProductPriceRange(portId) {
    return http.get(`/user/index/ports/${portId}/price-range`)
  },

  /**
   * 获取高评分商品（首页推荐）
   * @returns {Promise} 高评分商品列表
   */
  getHighScoreProducts() {
    return http.get('/user/index/products/highScore')
  },

  /**
   * 获取国家及其港口数量统计
   * @returns {Promise} 国家港口统计数据
   */
  getCountriesWithPortCount() {
    return http.get('/user/index/countries/withPortCount')
  },

  /**
   * 根据国家ID获取港口列表
   * @param {string|number} countryId 国家ID
   * @returns {Promise} 国家港口列表数据
   */
  getPortsByCountry(countryId) {
    return http.get(`/user/index/countries/${countryId}/ports`)
  },

  /**
   * 获取热门港口列表
   * @returns {Promise} 热门港口列表数据
   */
  getPopularPorts() {
    return http.get('/user/index/ports/popular')
  },

  /**
   * 获取港口详情信息
   * @param {string|number} portId 港口ID
   * @returns {Promise} 港口详情数据
   */
  getPortDetail(portId) {
    return http.get(`/user/index/ports/${portId}/detail`)
  },

  /**
   * 根据地区获取港口列表
   * @param {string} region 地区名称
   * @returns {Promise} 地区港口列表数据
   */
  getPortsByRegion(region) {
    const params = new URLSearchParams({ region })
    return http.get(`/user/index/ports/byRegion?${params.toString()}`)
  },

  /**
   * 获取港口推荐商品（首页热门推荐）
   * @param {string|number} portId 港口ID，可选
   * @param {object} params 查询参数
   * @param {number} params.page 页码，默认1
   * @param {number} params.size 每页大小，默认12
   * @returns {Promise} 推荐商品列表
   */
  getPortRecommendProducts(portId, params = {}) {
    const queryParams = new URLSearchParams()
    
    queryParams.append('page', params.page || 1)
    queryParams.append('size', params.size || 12)
    
    if (portId) {
      return http.get(`/user/index/ports/${portId}/recommend-products?${queryParams.toString()}`)
    } else {
      // 如果没有指定港口，获取全局高评分商品
      return http.get(`/user/index/products/highScore?${queryParams.toString()}`)
    }
  },

  /**
   * 搜索商品（模糊查询）
   * @param {object} params 搜索参数
   * @param {string} params.keyword 搜索关键词
   * @param {number} params.page 页码，默认1
   * @param {number} params.size 每页大小，默认12
   * @param {string} params.sortBy 排序方式：price_asc, price_desc, score_desc, sales_desc
   * @returns {Promise} 搜索结果数据
   */
  searchProducts(params = {}) {
    const queryParams = new URLSearchParams()
    
    // 必填参数：搜索关键词
    if (params.keyword && params.keyword.trim()) {
      queryParams.append('keyword', params.keyword.trim())
    } else {
      return Promise.reject(new Error('搜索关键词不能为空'))
    }
    
    // 添加分页参数
    queryParams.append('page', params.page || 1)
    queryParams.append('size', params.size || 12)
    
    // 添加排序参数
    if (params.sortBy) {
      queryParams.append('sortBy', params.sortBy)
    }
    
    return http.get(`/user/index/search/products?${queryParams.toString()}`)
  },

  /**
   * 获取热门搜索关键词
   * @returns {Promise} 热门搜索词列表
   */
  getHotSearchKeywords() {
    return http.get('/user/index/search/hot-keywords')
  },

  /**
   * 获取推荐分类
   * @param {number} limit 返回数量限制，默认8个
   * @returns {Promise} 推荐分类列表
   */
  getRecommendCategories(limit = 8) {
    const queryParams = new URLSearchParams()
    queryParams.append('limit', limit)
    
    return http.get(`/user/index/categories/recommend?${queryParams.toString()}`)
  },

  /**
   * 根据分类ID获取商品
   * @param {string|number} categoryId 分类ID
   * @param {object} params 查询参数
   * @param {number} params.page 页码，默认1
   * @param {number} params.size 每页大小，默认12
   * @param {string} params.sortBy 排序方式，默认score_desc
   * @returns {Promise} 分类商品列表
   */
  getProductsByCategory(categoryId, params = {}) {
    const queryParams = new URLSearchParams()
    
    // 添加分页参数
    queryParams.append('page', params.page || 1)
    queryParams.append('size', params.size || 12)
    
    // 添加排序参数
    queryParams.append('sortBy', params.sortBy || 'score_desc')
    
    return http.get(`/user/index/categories/${categoryId}/products?${queryParams.toString()}`)
  },

  /**
   * 综合搜索（同时搜索商品和分类）
   * @param {object} params 搜索参数
   * @param {string} params.keyword 搜索关键词
   * @param {number} params.page 页码，默认1
   * @param {number} params.size 每页大小，默认12
   * @returns {Promise} 综合搜索结果
   */
  comprehensiveSearch(params = {}) {
    const queryParams = new URLSearchParams()
    
    // 必填参数：搜索关键词
    if (params.keyword && params.keyword.trim()) {
      queryParams.append('keyword', params.keyword.trim())
    } else {
      return Promise.reject(new Error('搜索关键词不能为空'))
    }
    
    // 添加分页参数
    queryParams.append('page', params.page || 1)
    queryParams.append('size', params.size || 12)
    
    return http.get(`/user/index/search/comprehensive?${queryParams.toString()}`)
  },

}

export default indexApi 